package com.yidu.t286.controller;
/*
 * @description: 用户控制器类
 * @author:文杰
 * @date  :2021/7/27 0027上午 9:13
 */

import com.yidu.t286.biz.impl.CaruserBizImpl;
import com.yidu.t286.domain.Caruser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@RestController //restful风格代码
@CrossOrigin
public class CaruserController {

       @Autowired
       private CaruserBizImpl caruserBiz;


        /**
         * 按条件对用户集合对象进行分页查询
         * @param req 请求对象
         * @param page 页数
         * @param limit 行数
         * @param userName 用户名
         * @return map集合
         */
       @GetMapping("/caruser")
       public Map<String,Object> selectDrug(HttpServletRequest req, int page, int limit, String userName){
               //定义用于构造多条件查询的用户对象
               Caruser caruser= new Caruser();
               //判断并加入到用户对象中
               if(userName!=null && userName.trim().length()!=0){
                       caruser.setUserName(userName);
               }
               //调用数据方法，根据用户对象构造查询条件字符串
               String condition=caruserBiz.getCondition(caruser);
               //执行多条件分页查询
               List<Caruser> caruserList=caruserBiz.findByPage(limit,page,condition);
               //多条件查询表中总记录数
               int totalRows=caruserBiz.count(condition);

               //定义映射集合对象
               Map<String,Object> mapData=new HashMap<String,Object>();
               //在映射集合中添加key为code，值为0的状态码
               mapData.put("code",0);
               //在映射集合中添加key为msg,值为响应信息字符串
               mapData.put("msg","");
               //在映射集合中添加key为count,值总行数的数据对
               mapData.put("count",totalRows);
               //在映射集合中添加key为data,值为用户集合对象
               mapData.put("data",caruserList);
               //直接返回对象
               return mapData;
        }

        /**
         * 跟据用户id删除数据
         * @param caruId 用户id
         * @return 信息字符串
         */
        @DeleteMapping("/caruser/{caruId}")
        public String deleteById(@PathVariable int caruId){
            //调用业务层代码删除用户
            int rows=caruserBiz.delete(caruId);
            //判断返回值
            if (rows>0){
                //删除成功
                return "delete success";
            }else{
                //删除失败
                return "delete failure";
            }
        }

        /**
         * 添加用户对象
         * @param caruser 用户对象
         * @return 信息字符串
         */
        @PostMapping("/caruser")
        public String add(@RequestBody Caruser caruser){
            //添加用户对象到数据库表
            int rows=caruserBiz.add(caruser);
            return rows>0?"add success":"add failure";
        }

        /**
        * 修改用户
        * @param caruser 用户对象
        * @return  信息字符串
        */
        @PutMapping("/caruser")
        public String update(@RequestBody Caruser caruser){
            //修改用户对象到表
            int rows=caruserBiz.update(caruser);
            return rows>0?"update success":"update failure";
        }

         /**
         * 循环删除用户对象
         * @param caruserStr 用户iD字符串
         * @return 信息字符串
         */
        @PutMapping("/batchDel")
        public String batchDelById(@RequestParam String caruserStr){
            //对用户编号字符串按照","分割
            String[] caruIds=caruserStr.split(",");
            //定义一个返回值
            String result="delete success";
            //循环删除
            for (String str:caruIds){
                //转换类型
                int caruId=Integer.parseInt(str);
                //调用业务层删除记录
                int rows=caruserBiz.delete(caruId);
                //判断
                if (rows<=0){
                    result="batch delete failure";
                    break;
                }
            }
            return result;
        }


    @GetMapping("/logins")
    public List<Caruser> getAllEmps(Caruser caruser){
        System.out.println(caruser);
        //查询所有用户数据
        List<Caruser> caruserList=caruserBiz.findAll();
        return caruserList;
    }


    @RequestMapping("/login")
    public String login(Caruser caruser){
        //定义一个返回值
        String result="";
        //查询所有用户数据
        List<Caruser> caruserList=caruserBiz.findAll();
        //循环遍历所有用户
        for (Caruser caruser1:caruserList){
            //判断用户名和密码是否正确
            if (caruser1.getUserName().equals(caruser.getUserName()) && caruser1.getUserPassword().equals(caruser.getUserPassword())){
                //生成token
                String token= String.valueOf(UUID.randomUUID());
                //将token赋值到用户对象中
                caruser1.setToken(token);
                //得到用户对象中的token
                 result=caruser1.getToken();
                 caruserBiz.updatetoken(caruser1);
            }
        }
        System.out.println(result);
        return result;
    }
}
